<?php
class LoginController extends Controller
{
    public function actionIndex()
    {
        /* Thời gian lưu mật khẩu */
        $cookie_time = 20 * 365 * 24 * 60 * 60;
        $this->linkCanoncical = Url::createUrl('login/index');
        $this->metaTitle = "mTop - Mạng kiếm tiền trực tuyến.";
        $this->metaKeywords = "Bán game, Bán ứng dụng, Bán SMS Kute, Bán hotclip, Gắn kích hoạt apk, Gắn kích hoạt java ,  Kinh doanh sms";
        $this->metaDescription = "Mạng kiếm tiền online của Wapmaster - Kinh doanh SMS  Content - Kinh doanh Game và Ứng dụng.";
        
        
        if(isset($_SESSION["userId"])){
            $this->redirect(Url::createUrl("/home/index"));
        }
        
        $user = "";
        $pass = "";
        if(isset($_COOKIE["loginAuth"])){            
            parse_str($_COOKIE["loginAuth"]);            
        }
        $error = "";
         
        if(isset($_POST["username"]) && isset($_POST["password"])){                    
            $error .= (empty($_POST["username"]) || empty($_POST["password"])) ? "Tên đăng nhập hoặc mật khẩu không đúng" : "";
            $remember = isset($_POST["remember"]) ? 1 : 0;
               
            if(empty($error)) {
                $username = trim(strip_tags(Common::cleanQuery($_POST["username"])));
                $password = trim(strip_tags(Common::cleanQuery($_POST["password"])));
                $pass_no_md5 = $password;
                $password = Common::genPass($password);
                
                $data["password"] = $password;
                $data["username"] = $username;
                $result = Login::getUser($data);
                if(empty($result)){
                    $error .= "Tên đăng nhập hoặc mật khẩu không đúng";                        
                } else {
                    if($result["active"]==0){                    
                        $error .= "Tài khoản chưa được kích hoạt";                            
                    } else if ($result["isBan"]==1){                    
                        $error .= "Tài khoản đã bị khóa";                                
                    } else {
                    
                        Login::updateLastLogin($result["id"]);
                        
                        $_SESSION["userId"] = $result["id"];
                        $_SESSION["username"] = $result["username"];  
                        $_SESSION["remember"] = $remember;  
                                                
                        if($remember==1){                                                    
                            setcookie("loginAuth", 'user=' . $result["username"] . '&pass=' . $pass_no_md5, time() + $cookie_time, "/");                            
                        }
                                                                       
                         $this->redirect(Url::createUrl("home/index"));   
                    }
                }
            }
        }
         $this->render(
            "index"
            , array(
                "error"=>$error
                , "user"=>$user
                , "pass"=>$pass
            )
        );      
    }
    
    public function actionLogout()
    {
        if(isset($_SESSION["userId"])){
            setcookie("loginAuth", '', 0, "/");            
            unset($_SESSION["userId"], $_SESSION["username"]);         
        }
        $this->redirect(Url::createUrl("home/index"));   
    }
    
    public function actionRegister()
    {
        $this->linkCanoncical = Url::createUrl('login/register');
        $this->metaTitle = "Dang ky thanh vien - mtop.vn de Kiem tien tren mang";
        $this->metaKeywords = "dang ky thanh vien,kiem tien tren mang, kiem tien online, viec lam online";
        $this->metaDescription = "Đăng ký thành viên, kiếm tiền trên mạng trên trang mtop.vn";
        
        if(isset($_SESSION["userId"])){
            $this->redirect(Url::createUrl("/user/index"));
        }        
        
        /* regx */
        $regxUsername = "/^[a-z](?=[a-z0-9]{3,24}$)[a-z0-9]*\.?[a-z0-9]*$/";
        $regxEmail = "/^[^0-9][A-z0-9_]+([.][A-z0-9_]+)*[@][A-z0-9_]+([.][A-z0-9_]+)*[.][A-z]{2,4}$/";
        
        /* Lấy các từ khóa bị cấm */
        $blacklist = Login::getBlacklist();
        
        $data = array();        
        $error = "";
        if(isset($_POST["username"])){
            $data["username"] = trim(strip_tags($_POST["username"]));
            $data["email"] = trim(strip_tags($_POST["email"]));
            $data["password"] = trim(strip_tags($_POST["password"]));
            $data["password_retype"] = trim(strip_tags($_POST["password_retype"]));
            
            if(empty($data["username"])){
                $error .= "<p>- Tên đăng nhập không thể rỗng</p>";
            } else {
                if(!preg_match($regxUsername, $data["username"])){
                    $error .= "<p>- Tên đăng nhập không đúng định dạng. Tên đăng nhập phải có ít nhất 4 ký tự và dài nhất 25 ký tự. Tên đăng nhập chỉ bao gồm chữ cái thường và số</p>";    
                } else {
                    /* Kiểm tra blacklist */
                    $username = strtolower($data["username"]);                    
                    if(!empty($blacklist) && preg_match($blacklist, $username)){
                        $error .= "<p>- Tên đăng nhập dùng từ nhạy cảm trái với quy định của mtop.vn</p>";       
                    }
                }               
            }
            
            if(empty($data["email"])){
                $error .= "<p>- Email không thể rỗng</p>";
            } else {
                $resultCheckEmail = Common::validateEmailSyntax($data["email"]);
                if(!$resultCheckEmail || strlen($data["email"])>50 || strlen($data["email"])<5){
                    $error .= "<p>- Email không đúng định dạng</p>";    
                }                
            }
            
            $error .= empty($data["password"]) ? "<p>- Mật khẩu không thể rỗng.</p>" : "";
            $error .= empty($data["password_retype"]) ? "<p>- Mật khẩu xác nhận không thể rỗng.</p>" : "";
            if(!empty($data["password"]) && !empty($data["password_retype"])){
                if($data["password_retype"] != $data["password"]){
                    $error .= "<p>- Hai mật khẩu không trùng khớp</p>";
                } else {
                    $error .= Common::CheckPassword($data["password"]);
                }
            }            
            
            $checkUsername = Login::checkUsername($data["username"]);
            $checkEmail = Login::checkEmail($data["email"]);
            $error .= $checkUsername>0 ? "<p>- Tên đăng nhập đã tồn tại</p>" : "";
            $error .= $checkEmail>0 ? "<p>- Email đã tồn tại</p>" : "";
            
            /* check catpcha */
            $code = trim(strip_tags($_POST["code"]));
            $code_security = isset($_SESSION["code_security"]) ? $_SESSION["code_security"] : "";
            if(empty($code)){
                $error .= "<p>- Bạn chưa nhập mã xác nhận</p>";    
            } else {
                $error .= $code!=$code_security ? "<p>- Bạn nhập mã xác thực không đúng</p>" : "";   
            }
            
            if(empty($error)){
                /* sinh mã xác nhận */
                $random_str = md5(microtime());
                $random_str = substr($random_str, 0, 9);
                $data["key_active"] = $random_str;            
                $password_forum = md5(md5($data["password"]));
                $data["password"] = Common::genPass($data["password"]);
                $data["active"] = 0;
                $data["create_date"] = time();
                $data["last_login"] = time();
                
                /* Insert vào db */                
                unset($data["password_retype"]);
                $userId = Login::InsertUsername($data, $password_forum);
                if($userId > 0){                    
                    /* Gửi mail */
                    if(Yii::app()->params["sendEmail"]){
                        $url_active = Yii::app()->params["base_url_email"] . Url::createUrl("login/active", array("email"=>$data["email"], "invite"=>$data["key_active"]));
                        $msg = $this->renderPartial("_email_register", array("data"=>$data, "url_active"=>$url_active), true);
                     
                        Yii::import("application.vendors.PhpMailer",true);
                        $mail = new PHPMailer(true);
                        $mail->IsSMTP();
                        $mailer = new Mailer($mail);
                                                
                        $mailer->setContent("Ðăng ký tài khoản - mtop.vn", $msg);
                        $mailer->sendMail($data["email"]);
                    }
                    
                    /* Tạo thư mục */
                    $location = getcwd();
                    $location_user = $location . "/upload/user/" . $data["username"] . "/";                    
                    if(@chdir($location_user) == false) @mkdir($location_user, 0777, true);
                    
                    $location_game = $location . "/upload/user/" . $data["username"] . "/game/";
                    if(@chdir($location_game) == false) @mkdir($location_game, 0777, true);
                          
                    $url = "http://diendan.mtop.vn/register/register?refer=1";
                    $params = array(
                       "username"=>trim(strip_tags($_POST["username"]))
                       ,"email"=>trim(strip_tags($_POST["email"]))
                       ,"password"=>trim(strip_tags($_POST["password"]))
                       ,"password_confirm"=>trim(strip_tags($_POST["password_retype"]))
                       ,"dob_month"=>rand(1,12)
                       ,"dob_day"=>rand(1,28)
                       ,"dob_year"=>rand(1980,2000)
                       ,"gender"=>"male"
                       ,"timezone"=>"Asia/Bangkok"
                       ,"agree"=>"1"
                    );
                    $result = Common::callUrlAction($url,$params);
                    
                    $this->redirect(Url::createUrl("/message/register"));
                }
            }
        } 
        
        $this->render(
            "register"
            , array(
                "error"=>$error
                , "data"=>$data
            )
        );
    }
    
    public function actionActive()
    {
        $this->layout = "message";        
        
        $email = isset($_GET["email"]) ? Common::cleanQuery($_GET["email"]) : "";
        $key_active = isset($_GET["invite"]) ? Common::cleanQuery($_GET["invite"]) : "";
        if(empty($key_active) || empty($email)){
            throw new CHttpException(404, "Không tìm thấy trang yêu cầu");
        }
        
        $userInfo = Login::getUserByKey($email, $key_active);
        if(empty($userInfo)){
            $result = "Mã kích hoạt không đúng hoặc tài khoản này đã được kích hoạt";
        } else {
            $result = Login::activeUser($userInfo["id"]);
            if($result >= 0){
                $result = "Bạn đã kích hoạt tài khoản thành công.";             
            } else {
                $result = "Kích hoạt tài khoản thất bại. Vui lòng liên lạc với quản trị về vấn đề này";
            }
        }
        
        $this->render(
            "active"
            , array(
                "result"=>$result
            )
        );
    }
    
    public function actionForgotPassword()
    {
        $this->linkCanoncical = Url::createUrl('login/forgotPassword');
        $this->metaTitle = "Quen mat khau, lay lai mat khau - mtop.vn";
        $this->metaKeywords = "quen mat khau, kiem tien tren mang, kiem tien online, viec lam online";
        $this->metaDescription = "Quên mật khẩu, Hướng dẫn cách Lấy lại mật khẩu trên trang mtop.vn";
        
        $regxEmail = "/^[^0-9][A-z0-9_]+([.][A-z0-9_]+)*[@][A-z0-9_]+([.][A-z0-9_]+)*[.][A-z]{2,4}$/";         
        $error = "";
        $email = "";
        if(isset($_POST["email"])){
            $email = trim(strip_tags($_POST["email"]));
            /* Kiểm tra email có tồn tại không */
            if(empty($email)){
                $error .= "<p>- Email không thể rỗng</p>";
            } else {
                if(!preg_match($regxEmail, $email)){
                    $error .= "<p>- Email không đúng định dạng</p>";    
                }                
            }
                            
            $checkEmail = Login::checkEmail($email);
            $error .= $checkEmail==0 ? "<p>- Email không tồn tại</p>" : "";
            
            if(empty($error)){
                /* sinh mã xác nhận */
                $random_str = md5(microtime());
                $key_active_password = substr($random_str, 0, 9);
                
                /* Cập nhật mã xác nhận quên mật khẩu */                
                $result = Login::UpdateKeyActivePassword($email, $key_active_password);
                if($result >= 0){
                    if(Yii::app()->params["sendEmail"]){
                        /* Gửi mail */
                        $url_active = Yii::app()->params["base_url_email"] . Url::createUrl("login/activeForgotPassword", array("email"=>$email, "invite"=>$key_active_password));
                        $msg = $this->renderPartial("_email_forgot_password", array("url_active"=>$url_active, "email"=>$email, "key_active_password"=>$key_active_password), true);
                                                                    
                        Yii::import("application.vendors.PhpMailer",true);        
                        $mail = new PHPMailer(true);
                        $mail->IsSMTP();
                        $mailer = new Mailer($mail);
                                                
                        $mailer->setContent("Quên mật khẩu - mtop.vn", $msg);
                        $mailer->sendMail($email);
                    }
                    $this->redirect(Url::createUrl("/message/forgotPassword"));
                }
            }          
        }
        
        $this->render(
            "forgot_password"
            , array(
                "error"=>$error
                , "email"=>$email
            )
        );     
    }
    
    public function actionActiveForgotPassword()
    {        
        $email = isset($_GET["email"]) ? Common::cleanQuery($_GET["email"]) : "";
        $key_active_password = isset($_GET["invite"]) ? Common::cleanQuery($_GET["invite"]) : "";
        if(empty($key_active_password) || empty($email)){
            throw new CHttpException(404, "Không tìm thấy trang yêu cầu");
        }
        
        $error = "";
        $userInfo = Login::getUserByKeyPassword($email, $key_active_password);
        if(empty($userInfo)){
            $error .= "<p>- Mã kích hoạt không đúng</p>";
        } else {
            if(isset($_POST["password"])){
                /* Kiểm tra mật khẩu */
                $userId = $userInfo["id"];
                
                $password = trim(strip_tags($_POST["password"]));
                $password_retype = trim(strip_tags($_POST["password_retype"]));
                            
                $error .= empty($password) ? "<p>- Mật khẩu không thể rỗng.</p>" : "";
                $error .= empty($password_retype) ? "<p>- Mật khẩu xác nhận không thể rỗng.</p>" : "";
                if(!empty($password) && !empty($password_retype)){
                    if($password != $password_retype){
                        $error .= "<p>- Hai mật khẩu không trùng khớp</p>";
                    } else {
                        $error .= Common::CheckPassword($password);
                    }
                }
                
                if(empty($error)){
                    $pass = $password;
                    $password = Common::genPass($password);
                    $password_forum = md5(md5($pass));
                    $result = Login::changePassword($userId, $password, $password_forum);
                    
                    if($result >= 0){
                        if(Yii::app()->params["sendEmail"]){
                            /* Gửi mail */
                            $msg = $this->renderPartial(
                                "_email_change_password"
                                , array(
                                    "username"=>$userInfo["username"]
                                    , "password"=>$pass
                                )
                                , true
                            );
                                                                           
                            Yii::import("application.vendors.PhpMailer",true);        
                            $mail = new PHPMailer(true);
                            $mail->IsSMTP();
                            $mailer = new Mailer($mail);
                                                    
                            $mailer->setContent("Thay đổi mật khẩu - mtop.vn", $msg);
                            $mailer->sendMail($email);
                        }
                    }
                }
            }            
        }
        
        $this->render(
            "active_forgot_password"
            , array(
                "error"=>$error
            )
        );
    }
    
    public function actionChangePassword()
    {
        $this->direct();
        $error = "";
        
        $avatar = Login::getAvatar($_SESSION["userId"]);
                
        if(isset($_POST["password_old"]))
        {
            $userId = $_SESSION["userId"];
            
            /* Kiểm tra mật khẩu */
            $password_old = trim(strip_tags($_POST["password_old"]));
            $password_old = Common::genPass($password_old);            
            $checkPass = Login::checkPass($userId, $password_old);
            $error .= empty($checkPass) ? "<p>- Mật khẩu cũ không đúng</p>" : "";
            
            $password = trim(strip_tags($_POST["password"]));
            $password_retype = trim(strip_tags($_POST["password_retype"]));
                        
            $error .= empty($password) ? "<p>- Bạn chưa nhập mật khẩu mới.</p>" : "";
            $error .= empty($password_retype) ? "<p>- Bạn chưa nhập xác nhận mật khẩu.</p>" : "";
            if(!empty($password) && !empty($password_retype)){
                if($password != $password_retype){
                    $error .= "<p>- Hai mật khẩu không trùng khớp</p>";
                } else {
                    $error .= Common::CheckPassword($password);
                }
            }
            
            if(empty($error)){
                $pass = $password;
                $password = Common::genPass($password);
                $password_forum = md5(md5($pass));
                $result = Login::changePassword($userId, $password, $password_forum);
                
                if($result >= 0){
                    if(Yii::app()->params["sendEmail"]){
                        /* Gửi mail */
                        $msg = $this->renderPartial(
                            "_email_change_password"
                            , array(
                                "username"=>$_SESSION["username"]
                                , "password"=>$pass
                            )
                            , true
                        );
                                                                    
                        Yii::import("application.vendors.PhpMailer",true);        
                        $mail = new PHPMailer(true);
                        $mail->IsSMTP();
                        $mailer = new Mailer($mail);
                                                
                        $mailer->setContent("Thay đổi mật khẩu - mtop.vn", $msg);
                        $mailer->sendMail($checkPass["email"]);
                    }
                }
            }
        }
        
        $this->render(
            "change_password"
            , array(
                "error"=>$error                
                , "avatar"=>$avatar
            )
        );
    }
    
    public function actionProfile()
    {
        $this->direct();
        
        $info = Login::getUserInfo($_SESSION["userId"]);
        
        $this->render(
            "profile"
            , array(
                "info"=>$info                
            )
        );
    }
    
    public function actionEditProfile()
    {
        $this->direct();
        
        $error = "";
        $info = Login::getUserInfo($_SESSION["userId"]);
        if(isset($_POST["full_name"])){
            $data = array();
            $data["id"] = $info["id"];
            $data["full_name"] = trim(strip_tags($_POST["full_name"]));
            $data["mobile"] = trim(strip_tags($_POST["mobile"]));
            $data["gender"] = trim(strip_tags($_POST["gender"]));
            $data["birthday"] = strtotime($_POST["birthday"]);
            $data["day_birthday"] = !empty($data["birthday"]) ? date("d-m", $data["birthday"]) : "";
            $data["address"] = trim(strip_tags($_POST["address"]));
            $data["permanent_address"] = trim(strip_tags($_POST["permanent_address"]));
            $data["identity_number"] = trim(strip_tags($_POST["identity_number"]));
            $data["date_of_identity"] = strtotime($_POST["date_of_identity"]);
            $data["which_of_identity"] = trim(strip_tags($_POST["which_of_identity"]));
            $data["account_owner"] = trim(strip_tags($_POST["account_owner"]));
            $data["account_number"] = trim(strip_tags($_POST["account_number"]));
            $data["account_bank"] = trim(strip_tags($_POST["account_bank"]));
            $data["account_branch"] = trim(strip_tags($_POST["account_branch"]));
            $data["personal_tax_code"] = trim(strip_tags($_POST["personal_tax_code"]));
               
            if(empty($error)){
                
                $data["avatar"] = ""; 
                
                $result = Login::updateInfo($data);
                if($result >= 0){
                    $this->redirect(Url::createUrl("/login/profile"));
                }    
            }                
        }
        
        $this->render(
            "edit_profile"
            , array(
                "info"=>$info
                , "error"=>$error
            )
        );
    }
    
    public function direct(){
        if(!isset($_SESSION["userId"])){
            $this->redirect(Yii::app()->params["base_url"]);
        }           
    }    
}  
?>
